package interfaces;

/**
 * @author Johannes Böckh & Andreas Harder
 * Matriculation number JB: 927937
 * Matriculation number AH: 927938	
 *
 * The purpose of this standalone program is to simulate
 * a whole Bank system
 *
 * Notes:
 *
 * This ultra-high-end program is the product of long, painful hours
 * of Andreas Harder and Johannes Böckh, with big help from Coca Cola, 
 * Google Code, Galileo Openbooks and last but not
 * least from the pizza guy. 
 * 
 */

import money.Money;

public interface UserInterface {

	/**
	* Legt ein neues Festgeldkonto an
	* @param accountNumber Gegebene Account Nummer
	* @param accountNameDep Name des Kontoinhabers
	* @param runtime
	* @param language Sprache d. Kontoinhabers
	* @param country Land d. Kontoinhabers
	* @return void
	* @throws Exception
	*/
	public void newDepositAccount(int accountNumber, String accountNameDep, int runtime,
			String language, String country) throws Exception;

	/**
	* Legt ein neues Girokonto an
	* @param accountNumber Gegebene Konto Nummer
	* @param accountNameGiro Name des Kontoinhabers
	* @param runtime
	* @param language Sprache d. Kontoinhabers
	* @param country Land d. Kontoinhabers
	* @return void
	* @throws Exception
	*/
	public void newGiroAccount(int accountNumber, String accountNameGiro, int creditrating,
			String language, String country) throws Exception;
	
	/**
	* Zeigt den aktuellen Kontostand
	* @param accountNumber Accountnummer dessen Stand angezeigt werden soll
	* @return String Aktueller Kontostand mit Währungssymbol
	* @throws Exception
	*/
	public String showAccountValue(int accountNumber) throws Exception;

	/**
	* Mindert den Kontostand
	* @param value Betrag
	* @param reason Buchungsgrund
	* @param accountNumber Account der belastet werden soll
	* @return void
	* @throws Exception
	*/
	public void removeMoney(Money value, String reason, int accountNumber)
			throws Exception;

	/**
	* Erhöht den Kontostand
	* @param value Betrag
	* @param reason Buchungsgrund
	* @param accountNumber Account der erhöht werden soll
	* @return void
	* @throws Exception
	*/
	public void addMoney(Money value, String reason, int accountNumber)
			throws Exception;
	
	/**
	* Überweisung auf ein anderes Konto
	* @param acceptor Konto des Empfängers
	* @param value Betrag
	* @param reason Überweisungsgrund
	* @param accountNumber Account der belastet werden soll
	* @return void
	* @throws Exception
	*/
	public void transferMoney(int acceptor, Money value, String reason,
			int accountNumber) throws Exception;

	public void interestAll(int accountNumber) throws Exception;

	/**
	* Erstellt einen Kontoauszug und gibt diesen im entsprechenden Format aus
	* @param accountNumber Kontonummer
	* @param mimeTyp In welchem MIME-Format der Auszug ausgegeben werden soll. text/plain oder text/html
	* @return String
	* @throws IOException Falls keine Berechtigung zum schreiben der Datei oder Properties nicht vorhanden
	*/
	public String accountStatement(int accountNumber, String mimeType) throws Exception;

	/**
	* Markiert einen Account als aktiv
	* @param accountNumber Kontonummer
	* @return void
	* @throws Exception
	*/
	public void chooseAccount(int AccountNumber) throws Exception;
}